fwrite()、fread()函数使用小结

您所在的位置:网站首页 enjoy doing的用法小结 fwrite()、fread()函数使用小结

fwrite()、fread()函数使用小结

2024-06-09 15:20| 来源: 网络整理| 查看: 265

fwrite()函数和fread()函数的功能分别是将数据从内存中写入文件和从文件中读入内存。灵活运用这两个函数,可以在到很多地方发挥作用,如游戏存档、保存程序中间结果等。下面结合两个程序解释下这两个函数,是个人的理解,如有理解错误的地方,或者还有其他的功能,请大家留言指正,谢谢。

       size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);        size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

两个函数的参数列表基本一致。第一参数是指要写入的或者要读入到的指针,第二个参数是指每次写入或读出的大小,第三个指的是写入或读出的大小,第四个指的是写入或读出的文件流。

下面贴出来两端程序:

/*----write.c----*/

#include #include int main() { int * a; float b; double * c; int i; FILE * f; a = (int *) malloc(5*sizeof(int)); b = 2.f; c = (double *) malloc (10*sizeof(double)); for(i=0;i c[i]=99.; } f=fopen("content.dat","ab"); fwrite(a,5*sizeof(int),1,f); fwrite(&b,sizeof(float),1,f); fwrite(c,10*sizeof(double),1,f); fclose(f); return 0; }

这段代码的意思是,将一个大小为5的int数组、一个float、一个大小为10的double数组依次写入content.dat中。为了达到这个目的,fopen中的模式为“ab”,即append+binary模式。

/*----read.c----*/ #include #include int main() { int * a; float b; double * c; int i; FILE * f; a = (int *) malloc(5*sizeof(int)); c = (double *) malloc (10*sizeof(double)); f=fopen("content.dat","rb"); fread(a,5*sizeof(int),1,f); fread(&b,sizeof(float),1,f); fread(c,10*sizeof(double),1,f); for(i=0;i printf("c[%d]=%f ",i,c[i]); } printf("\n"); fclose(f); return 0; }

这段代码的意思是,将content.dat中的内容,按照写入的顺序依次读出,分别写入分配好的内存中间。然后打印出来,检查结果是否是存入时候的内容。结果输出时这样子的:

a[0]=0 a[1]=1 a[2]=2 a[3]=3 a[4]=4  b=2.000000 c[0]=99.000000 c[1]=99.000000 c[2]=99.000000 c[3]=99.000000 c[4]=99.000000 c[5]=99.000000 c[6]=99.000000 c[7]=99.000000 c[8]=99.000000 c[9]=99.000000

说明结果是正确的。这两个程序就是验证内存的保存和恢复。这里需要注意的是,写入的顺序和读出的顺序必须对应,并且大小和类型必须一致,不然就得不到正确的结果了。本人曾经用JAVA将对象写入文件过,相信底层也是用C中的fwrite()、fread()实现的吧。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3